/*
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the FxStruts MailReader Application.
 *
 * The Initial Developer of the Original Code is
 * Anirudh Sasikumar (http://anirudhs.chaosnet.org/).
 * Portions created by the Initial Developer are Copyright (C) 2008
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
*/

package com.adobe.mailreader.business
{
    import com.adobe.cairngorm.business.ServiceLocator;
    
    import mx.rpc.AsyncToken;
    import mx.rpc.IResponder;
    
    /* Handles subscription creation, deletion and editing */
    public class SubscriptionCreateEditDelegate
    {
        public function SubscriptionCreateEditDelegate(responder:IResponder)
        {			
            this.service = ServiceLocator.getInstance().getHTTPService("service");
            this.responder = responder;			
        }
        
        /* create the object based on the task */
        private function createSubscriptionObject(hostname:String, autoConnectVal:Boolean, 
                                                  user:String, pass:String, 
                                                  typeServer:String, token:String, 
                                                  taskData:String):Object
        {
            var obj:Object;
            
            if ( token == null )
            {
                obj = { task:taskData, host: hostname, username:user, password: pass,
                        type: typeServer };

            }
            else
            {
                obj = { "org.apache.struts.taglib.html.TOKEN": token, task:taskData, host: hostname, username:user, password: pass,
                       type: typeServer };
            }

            if ( taskData == "Create" || taskData == "Edit" )
            {
                obj["autoConnect"] = autoConnectVal;
            }
            
            return obj;
        }
        
        public function createSubscription(host:String, autoConnect:Boolean, username:String, pass:String, type:String, token:String):void
        {
            var obj:Object = createSubscriptionObject(host, autoConnect, username, pass, type, token, "Create");
            service.url = "SaveSubscription.do";			
            
            var call:AsyncToken = service.send(obj);
            call.addResponder(responder);
        }
        
        public function editSubscription(host:String, autoConnect:Boolean, username:String, pass:String, type:String, token:String):void
        {
            var obj:Object = createSubscriptionObject(host, autoConnect, username,pass,  type, token, "Edit");			
            service.url = "SaveSubscription.do";
            
            var call:AsyncToken = service.send(obj);
            call.addResponder(responder);
        }
        
        /* Because of use of saveToken() and validateToken() on the
         * struts side, the edit page has to be visited before a
         * save. Most commands extract the token obtained from this
         * call for use with the actual create or edit service
         * call.  */
        public function confirmSubscription(hostN:String, operation:String):void
        {
            var obj:Object = {host:hostN};
            if ( operation == "Create" )
            {
                operation = "Edit";
                obj = null;
            }			
            service.url = operation + "Subscription.do";
            
            var call:AsyncToken = service.send(obj);
            call.addResponder(responder);
        }
        
        public function deleteSubscription(host:String, autoConnect:Boolean, username:String, pass:String, type:String, token:String):void
        {
            var obj:Object = createSubscriptionObject(host, autoConnect, username,pass, type, token, "Delete");			
            service.url = "SaveSubscription.do";
            
            var call:AsyncToken = service.send(obj);
            call.addResponder(responder);
        }
        
        private var responder: IResponder;
        private var service: Object;
        
    }
}